package cn.zd.demo1.webview;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import java.util.Set;

import cn.zd.demo1.WebViewActivity;

public class MyWebViewClient extends WebViewClient {
    private final Context context;
    private WebViewActivity.Callback callback;


    public MyWebViewClient(Context context, WebViewActivity.Callback callback) {
        this.context = context;
        this.callback = callback;
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        view.loadUrl(request.getUrl().toString());
        // 一般根据scheme（协议格式） & authority（协议名）判断（前两个参数）
        //假定传入进来的 url = "js://webview?arg1=111&arg2=222"（同时也是约定好的需要拦截的）
        Uri uri = Uri.parse(request.getUrl().toString());
        // 如果url的协议 = 预先约定的 js 协议
        // 就解析往下解析参数
        if (uri.getScheme().equals("myjs")) {
            Toast.makeText(context,"自定义拦截成功",Toast.LENGTH_SHORT);
            // 如果 authority  = 预先约定协议里的 webview，即代表都符合约定的协议
            // 所以拦截url,下面JS开始调用Android需要的方法
            if (uri.getAuthority().equals("webview")) {
                // 执行JS所需要调用的逻辑
                // 可以在协议上带有参数并传递到Android上
                Set<String> collection = uri.getQueryParameterNames();

                String query = "";
                for (String s : collection) {
                    query += (s + ":" + uri.getQueryParameter(s) + "\t");
                }
                if (callback != null) {
                    callback.shouldOverrideUrlLoading(query);
                    view.stopLoading();
                }
                return true;
            }
        }
        return super.shouldOverrideUrlLoading(view, request);
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        Toast.makeText(context,"页面加载开始",Toast.LENGTH_SHORT);
        if(callback != null) {
            callback.onPageStarted(url, favicon);
        }
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        Toast.makeText(context,"页面加载完成",Toast.LENGTH_SHORT);
        if(callback != null) {
            callback.onPageFinished(url);
        }
    }

}
